
#ifndef _LISTETEMP_H
#define _LISTETEMP_H

/**
 * @file ListeTemp.h
 * @brief Contient la structure ListeTempQ et ses fonctions
 * @details liste des fonctions pour le module ListeTemp
 * @version 1.0
 * @date 2013/05/16
*/
#include "Question.h"
#include "lireFichier.h"

/**
* @struct ListetempQ structure listeTempQ
* @brief Structure ListeTempQ
* @details Permet de distribuer les questions aléatoirement, ListeTempQ(tab_de_pointeur_sur_question, entier, entier)
*/
typedef struct
{
    Question **tab;
	unsigned int taille_utilisee;
	unsigned int capacite;
} ListeTempQ;

/**
* @fn creerListeTempQ()
* @brief Alloue la mémoire pour la liste temporaire de questions et appel initListeTemp
* @param void
* @return ListeTempQ* pointeur sur la liste creer.
*/
ListeTempQ * creerListeTempQ();

/**
* @fn initListeTemp(ListeTempQ *)
* @brief Initialise la liste temporaire de questions envoyée en paramètre : taille_utilisé = 0 et capacité = 1
* @param [in,out] ListeTempQ pointeur sur la liste à initialiser
*/
void initListeTempQ(ListeTempQ *);

/**
* @fn ajouterQuestion(ListeTempQ *, const Question *)
* @brief Ajoute une question à la liste temporaire
* @param [in,out] ListeTempQ pointeur sur la liste
* @param [in] Question pointeur sur la question à ajouter
*/
void ajouterQuestion(ListeTempQ *);

/**
* @fn testamentListeTemp
* @brief fais appel a libereQuest et met capacité et taille_utilisée a 0.
* @param [in] ListeTempQ pointeur sur la liste
*/
void libereListeTempQ(ListeTempQ *);

/**
* @fn detruireListeTempQ
* @brief fais appel a testamentListeTemp et met le pointeur a NULL.
* @param [in] ListeTempQ** pointeur sur pointeur sur la liste
*/
void detruitListeTempQ(ListeTempQ ** Liste);

/**
* @fn supprimerElementListe
* @brief supprime un elet de liste dont l'indice de la position est passé en parametre .
* @param [in-out] ListeTempQ pointeur sur la liste
* @param [in] int l'indice de elet à supprimer.
*/
void supprimerElementListe(ListeTempQ *, int);

/**
* @fn nbrElementListeQ(const ListeTempQ *)
* @brief Renvoie le nombre d'éléments contenus dans la liste
* @param [in] ListeTempQ pointeur sur la liste
* @return Nombres d'éléments contenus dans la liste
*/
int nbrElementListeQ(const ListeTempQ *);

/**
* @fn initNbrAlea
* @brief initialise le tirage aleatoire.
* @param void
*/
void initNbrAlea();

/**
* @fn remplirQuestFichier
* @brief remplis la liste de question a partir d'un fichier txt .
* @param [in-out] ListeTempQ pointeur sur la liste
* @param [in] FILE * fichier texte contient des lignes de chaines de caractère.
*/
void remplirQuestFichier(FILE *, ListeTempQ *);

#endif
